<?php
/**
 * Created by PhpStorm.
 * User: m1514
 * Date: 2017/1/4
 * Time: 12:14
 */

namespace Home\Controller;


use Common\Model\BrandLogoModel;
use Common\Model\ClassModel;
use Common\Model\CommodityAttrModel;
use Common\Model\CommodityModel;
use Common\Model\GenrdAttrModel;
use Common\Model\GenrdModel;
use Think\Controller;

class ListController extends HomeQController
{
    public function index(){
        //分配js到公共页面
        $conf=[
            'js'=>['list']
        ];
        $this->assign('conf',$conf);
        $confData=[
            'css'=>['index']
        ];
        $this->assign('confData',$confData);
        $cid=I('get.cid');
        //处理面包屑，递归找父级
        $fatherData=$this->getFather((new ClassModel())->select(),$cid);
        //数组翻转
        $fatherData=array_reverse($fatherData);
        $this->assign('fatherData',$fatherData);
//        dd($fatherData);
        //获取对应商品gid数据
        $cids=$this->getSon((new ClassModel())->select(),$cid);
        $cids[]=$cid;
        //获取对应商品gid数据
        $gids=(new CommodityModel())->where("cid in (".implode(',',$cids).")")->getField('gid',true);
//        dd($gids);
        if($gids){
            //如果当前分类以及子类下面有商品
            //在商品属性表中获取商品对应的属性值【gtvalue】
            $attrData=(new CommodityAttrModel())->where("gid in (".implode(',',$gids).")")->group('gtvalue')->select();
//            dd($attrData);
            //将$attrData中的数据重组，把taid一样的放在一起
            $temp=[];
            foreach($attrData as $k=>$v){
                $temp[$v['taid']][]=$v;
            }
            //dd($temp);
            //继续重组数组，获取属性名称
            $finalTemp=[];
            foreach($temp as $k=>$v){
                $finalTemp[]=[
                    'name'=>(new GenrdAttrModel())->where("taid={$k}")->getField('taname'),
                    'value'=>$v,
                ];
            }
//            dd($finalTemp);
            $this->assign('finalTemp',$finalTemp);
            //筛选0_0_0_0_0
            $param=isset($_GET['param']) ? explode('_',$_GET['param']) : array_fill(0,count($finalTemp),0);
            $this->assign('param',$param);
//            dd($param);
            //进行筛选功能处理
            foreach($param as $k=>$v){
                if($v){
                    //如果有筛选
                    //根据gtid得到gtvalue，得到比如说【短袖】
                    $gtvalue=(new CommodityAttrModel())->where("gtid={$v}")->getField('gtvalue');
                    //在根据gtvalue[短袖]找到对应商品gid
                    $filterGids[]=(new CommodityAttrModel())->where("gtvalue='{$gtvalue}'")->getField('gid',true);
                }
            }
//            dd($filterGids);
            if($filterGids){
                //如果没有筛选gids
                $finalGids=$filterGids[0];
                foreach ($filterGids as $k=>$v){
                    //求交集$finalGids跟69行的变量保持一致
                    $finalGids=array_intersect($finalGids,$v);
                }
                //在跟$gids求交集，$finalGids是从商品属性表获取的，有可能出现商品不属于当前分类
                $finalGids=array_intersect($finalGids,$gids);
//                dd($finalGids);
            }else{
                //全都是不限的时候，那么最终gid就是$gids
                $finalGids=$gids;
            }
        }else{
           $finalGids=[];

        }
//        dd($finalGids);die;
        $goodsData=[];




//        $data=(new ClassModel())->where("cid={$cid} and pid={$cid}")->select();
//        dd($data);
//        获取点击分类下的商品
        $data=(new CommodityModel())->where("cid={$cid}")->select();
        $this->assign('data',$data);
//        //获取品牌列表
//        $brand=(new BrandLogoModel())->select();
//        $this->assign('brand',$brand);
//        //获取分类列表
//        $category=(new ClassModel())->where("pid={$cid}")->select();
//        $this->assign('category',$category);
//        dd($category);
        //显示模板
        $this->display();
    }
    /**
     * 找子集
     * @param $data  分类数据
     * @param $cid	分类id
     */
    public function getSon($data,$cid){
        static $temp = [];
        foreach($data as $k=>$v)
        {
            if($v['pid']==$cid){
                $temp[] = $v['cid'];
                $this->getSon($data,$v['cid']);
            }
        }
        return $temp;
    }
    /**
     * 递归找父级
     * @param $data 分类数据
     * @param $cid  分类id
     */
    public function getFather($data,$cid)
    {
        static $temp = [];
        foreach($data as $k=>$v)
        {
            if($v['cid']==$cid){
                $temp[] = $v;
                $this->getFather($data,$v['pid']);
            }
        }
        return $temp;
    }
}